<?php

namespace app\modules\user\service;

use Yii;
use yii\helpers\ArrayHelper;
use app\common\base\CommonService;
use app\modules\user\models\Account;
use app\helpers\DatetimeHelper;

class AccountService extends CommonService
{
    const PASSWORD_PREFIX = 'eflow';
    function __construct()
    {
        // 对父类service(component)初始化，并指定model
        parent::init();
        $this->model = new Account();
    }

    /**
     * 登录核验逻辑，返回info
     * 
     * @param string $userid
     * @param string $password
     * @return array $info
     */
    public function login($username, $password)
    {
        // 查找数据库中用户信息
        $info = $this->info([
            'condition' => [
                'username' => $username,
            ]
        ]);

        // TODO: use redis to check the times of try

        // user info not found
        if(empty($info)){
            // @see config/response_code
            return parent::error('ERROR_INVALID_USERID', '用户不存在');
        }
        if ($this->buildPassword($password) != $info['password']) {
            return parent::error('ERROR_INVALID_PASSWORD', '密码不正确');
        }

        // TODO: 用户其他业务信息获取

        // 创建token，添加用户信息
        $token = Yii::$app->jwt->createToken([
            'id' => $info['id'],
            'isAdmin' => $info['isAdmin']
        ]);

        unset($info['password']);
        return [
            'info' => $info,
            'token' => $token
        ];
    }

    public function changePw($id, $newPw)
    {
        $info = $this->info([
            'condition' => [
                'id' => $id,
            ]
        ]);

        if(empty($info)){
            // @see config/response_code
            return parent::error('ERROR_INVALID_USERID', '用户不存在');
        }

        $this->save(['id' => $id, 'password' => $newPw], ['id']);
    }

    /**
     * 密码加密;
     *
     * @return string 加密后的密码
     */
    public function buildPassword($password)
    {
        return base64_encode(self::PASSWORD_PREFIX . $password);
    }
    
    /**
     * 数据转换接口：username -> id
     */
    public function usernameToId($username)
    {
        // 查找数据库中用户信息
        $info = $this->info([
            'condition' => [
                'username' => $username,
            ]
        ]);

        if(!empty($info)){
            return $info['id'];
        } else {
            return parent::error('ERROR_INVALID_USERID', '用户不存在');
        }
    }

    /**
     * 数据转换接口：id -> username
     */
    public function idToUsername($id)
    {
        // 查找数据库中用户信息
        $info = $this->info([
            'condition' => [
                'id' => $id,
            ]
        ]);

        if(!empty($info)){
            return $info['username'];
        } else {
            return parent::error('ERROR_INVALID_USERID', '用户不存在');
        }
    }
}

